package com.object.rapid_rearend_01;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.object.dao.cbb.CbbAreaDao;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@SpringBootTest
public class TT {
     public static void main(String[] args) throws IOException {

         Map<String, List<String>> map = getCtit();
         System.out.println(JSON.toJSON(map));
     }


    @Autowired
    private RedisTemplate redisTemplate;

     @Autowired
     private CbbAreaDao areadaDao;;

    @Test
    void start(){
  redisTemplate.opsForValue().set("city","{\"福建省\":[\"福州市\",\"厦门市\",\"莆田市\",\"三明市\",\"泉州市\",\"漳州市\",\"南平市\",\"龙岩市\",\"宁德市\"],\"西藏自治区\":[\"拉萨市\",\"日喀则市\",\"昌都市\",\"林芝市\",\"山南市\",\"那曲市\",\"阿里地区\"],\"贵州省\":[\"贵阳市\",\"六盘水市\",\"遵义市\",\"安顺市\",\"毕节市\",\"铜仁市\",\"黔西南布依族苗族自治州\",\"黔东南苗族侗族自治州\",\"黔南布依族苗族自治州\"],\"上海市\":[\"黄浦区\",\"徐汇区\",\"长宁区\",\"静安区\",\"普陀区\",\"虹口区\",\"杨浦区\",\"闵行区\",\"宝山区\",\"嘉定区\",\"浦东新区\",\"金山区\",\"松江区\",\"青浦区\",\"奉贤区\",\"崇明区\"],\"湖北省\":[\"武汉市\",\"黄石市\",\"十堰市\",\"宜昌市\",\"襄阳市\",\"鄂州市\",\"荆门市\",\"孝感市\",\"荆州市\",\"黄冈市\",\"咸宁市\",\"随州市\",\"恩施土家族苗族自治州\"],\"湖南省\":[\"长沙市\",\"株洲市\",\"湘潭市\",\"衡阳市\",\"邵阳市\",\"岳阳市\",\"常德市\",\"张家界市\",\"益阳市\",\"郴州市\",\"永州市\",\"怀化市\",\"娄底市\",\"湘西土家族苗族自治州\"],\"广东省\":[\"广州市\",\"韶关市\",\"深圳市\",\"珠海市\",\"汕头市\",\"佛山市\",\"江门市\",\"湛江市\",\"茂名市\",\"肇庆市\",\"惠州市\",\"梅州市\",\"汕尾市\",\"河源市\",\"阳江市\",\"清远市\",\"东莞市\",\"中山市\",\"潮州市\",\"揭阳市\",\"云浮市\"],\"澳门特别行政区\":[\"花地玛堂区\",\"圣安多尼堂区\",\"大堂区\",\"望德堂区\",\"风顺堂区\",\"嘉模堂区\",\"圣方济各堂区\",\"路氹城\",\"澳门新城区\"],\"香港特别行政区\":[\"中西区\",\"湾仔区\",\"东区\",\"南区\",\"油尖旺区\",\"深水埗区\",\"九龙城区\",\"黄大仙区\",\"观塘区\",\"荃湾区\",\"屯门区\",\"元朗区\",\"北区\",\"大埔区\",\"西贡区\",\"沙田区\",\"葵青区\",\"离岛区\"],\"安徽省\":[\"合肥市\",\"芜湖市\",\"蚌埠市\",\"淮南市\",\"马鞍山市\",\"淮北市\",\"铜陵市\",\"安庆市\",\"黄山市\",\"滁州市\",\"阜阳市\",\"宿州市\",\"六安市\",\"亳州市\",\"池州市\",\"宣城市\"],\"四川省\":[\"成都市\",\"自贡市\",\"攀枝花市\",\"泸州市\",\"德阳市\",\"绵阳市\",\"广元市\",\"遂宁市\",\"内江市\",\"乐山市\",\"南充市\",\"眉山市\",\"宜宾市\",\"广安市\",\"达州市\",\"雅安市\",\"巴中市\",\"资阳市\",\"阿坝藏族羌族自治州\",\"甘孜藏族自治州\",\"凉山彝族自治州\"],\"新疆维吾尔自治区\":[\"乌鲁木齐市\",\"克拉玛依市\",\"吐鲁番市\",\"哈密市\",\"昌吉回族自治州\",\"博尔塔拉蒙古自治州\",\"巴音郭楞蒙古自治州\",\"阿克苏地区\",\"克孜勒苏柯尔克孜自治州\",\"喀什地区\",\"和田地区\",\"伊犁哈萨克自治州\",\"塔城地区\",\"阿勒泰地区\"],\"江苏省\":[\"南京市\",\"无锡市\",\"徐州市\",\"常州市\",\"苏州市\",\"南通市\",\"连云港市\",\"淮安市\",\"盐城市\",\"扬州市\",\"镇江市\",\"泰州市\",\"宿迁市\"],\"吉林省\":[\"长春市\",\"吉林市\",\"四平市\",\"辽源市\",\"通化市\",\"白山市\",\"松原市\",\"白城市\",\"延边朝鲜族自治州\"],\"宁夏回族自治区\":[\"银川市\",\"石嘴山市\",\"吴忠市\",\"固原市\",\"中卫市\"],\"河北省\":[\"石家庄市\",\"唐山市\",\"秦皇岛市\",\"邯郸市\",\"邢台市\",\"保定市\",\"张家口市\",\"承德市\",\"沧州市\",\"廊坊市\",\"衡水市\"],\"河南省\":[\"郑州市\",\"开封市\",\"洛阳市\",\"平顶山市\",\"安阳市\",\"鹤壁市\",\"新乡市\",\"焦作市\",\"濮阳市\",\"许昌市\",\"漯河市\",\"三门峡市\",\"南阳市\",\"商丘市\",\"信阳市\",\"周口市\",\"驻马店市\"],\"广西壮族自治区\":[\"南宁市\",\"柳州市\",\"桂林市\",\"梧州市\",\"北海市\",\"防城港市\",\"钦州市\",\"贵港市\",\"玉林市\",\"百色市\",\"贺州市\",\"河池市\",\"来宾市\",\"崇左市\"],\"海南省\":[\"海口市\",\"三亚市\",\"三沙市\",\"儋州市\"],\"重庆市\":[\"万州区\",\"涪陵区\",\"渝中区\",\"大渡口区\",\"江北区\",\"沙坪坝区\",\"九龙坡区\",\"南岸区\",\"北碚区\",\"綦江区\",\"大足区\",\"渝北区\",\"巴南区\",\"黔江区\",\"长寿区\",\"江津区\",\"合川区\",\"永川区\",\"南川区\",\"璧山区\",\"铜梁区\",\"潼南区\",\"荣昌区\",\"开州区\",\"梁平区\",\"武隆区\"],\"江西省\":[\"南昌市\",\"景德镇市\",\"萍乡市\",\"九江市\",\"新余市\",\"鹰潭市\",\"赣州市\",\"吉安市\",\"宜春市\",\"抚州市\",\"上饶市\"],\"云南省\":[\"昆明市\",\"曲靖市\",\"玉溪市\",\"保山市\",\"昭通市\",\"丽江市\",\"普洱市\",\"临沧市\",\"楚雄彝族自治州\",\"红河哈尼族彝族自治州\",\"文山壮族苗族自治州\",\"西双版纳傣族自治州\",\"大理白族自治州\",\"德宏傣族景颇族自治州\",\"怒江傈僳族自治州\",\"迪庆藏族自治州\"],\"北京市\":[\"东城区\",\"西城区\",\"朝阳区\",\"丰台区\",\"石景山区\",\"海淀区\",\"门头沟区\",\"房山区\",\"通州区\",\"顺义区\",\"昌平区\",\"大兴区\",\"怀柔区\",\"平谷区\",\"密云区\",\"延庆区\"],\"甘肃省\":[\"兰州市\",\"嘉峪关市\",\"金昌市\",\"白银市\",\"天水市\",\"武威市\",\"张掖市\",\"平凉市\",\"酒泉市\",\"庆阳市\",\"定西市\",\"陇南市\",\"临夏回族自治州\",\"甘南藏族自治州\"],\"山东省\":[\"济南市\",\"青岛市\",\"淄博市\",\"枣庄市\",\"东营市\",\"烟台市\",\"潍坊市\",\"济宁市\",\"泰安市\",\"威海市\",\"日照市\",\"临沂市\",\"德州市\",\"聊城市\",\"滨州市\",\"菏泽市\"],\"陕西省\":[\"西安市\",\"铜川市\",\"宝鸡市\",\"咸阳市\",\"渭南市\",\"延安市\",\"汉中市\",\"榆林市\",\"安康市\",\"商洛市\"],\"浙江省\":[\"杭州市\",\"宁波市\",\"温州市\",\"嘉兴市\",\"湖州市\",\"绍兴市\",\"金华市\",\"衢州市\",\"舟山市\",\"台州市\",\"丽水市\"],\"内蒙古自治区\":[\"呼和浩特市\",\"包头市\",\"乌海市\",\"赤峰市\",\"通辽市\",\"鄂尔多斯市\",\"呼伦贝尔市\",\"巴彦淖尔市\",\"乌兰察布市\",\"兴安盟\",\"锡林郭勒盟\",\"阿拉善盟\"],\"青海省\":[\"西宁市\",\"海东市\",\"海北藏族自治州\",\"黄南藏族自治州\",\"海南藏族自治州\",\"果洛藏族自治州\",\"玉树藏族自治州\",\"海西蒙古族藏族自治州\"],\"天津市\":[\"和平区\",\"河东区\",\"河西区\",\"南开区\",\"河北区\",\"红桥区\",\"东丽区\",\"西青区\",\"津南区\",\"北辰区\",\"武清区\",\"宝坻区\",\"滨海新区\",\"宁河区\",\"静海区\",\"蓟州区\"],\"辽宁省\":[\"沈阳市\",\"大连市\",\"鞍山市\",\"抚顺市\",\"本溪市\",\"丹东市\",\"锦州市\",\"营口市\",\"阜新市\",\"辽阳市\",\"盘锦市\",\"铁岭市\",\"朝阳市\",\"葫芦岛市\"],\"台湾省\":[\"台北\",\"高雄\",\"基隆\",\"台中\",\"台南\",\"新竹\",\"嘉义\",\"新北\",\"桃园\",\"宜兰县\",\"新竹县\",\"苗栗县\",\"彰化县\",\"南投县\",\"云林县\",\"嘉义县\",\"屏东县\",\"台东县\",\"花莲县\",\"澎湖县\"],\"黑龙江省\":[\"哈尔滨市\",\"齐齐哈尔市\",\"鸡西市\",\"鹤岗市\",\"双鸭山市\",\"大庆市\",\"伊春市\",\"佳木斯市\",\"七台河市\",\"牡丹江市\",\"黑河市\",\"绥化市\",\"大兴安岭地区\"],\"山西省\":[\"太原市\",\"大同市\",\"阳泉市\",\"长治市\",\"晋城市\",\"朔州市\",\"晋中市\",\"运城市\",\"忻州市\",\"临汾市\",\"吕梁市\"]}");
        Object city = redisTemplate.opsForValue().get("city");
        JSONObject object = JSON.parseObject(String.valueOf(city));
    }

    public static Map<String, List<String>> getCtit() {
        String url = "https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=28209&from_mid=1&&format=json&query=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E4%B8%8B%E8%BE%96%E7%9C%81%E7%BA%A7%E8%A1%8C%E6%94%BF%E5%8C%BA&pn=0&rn=70";
        String data = getUrl(url);
        JSONArray data1 = JSONObject.parseObject(data).getJSONArray("data");
        JSONArray result = JSONObject.parseObject(data1.get(0).toString()).getJSONArray("result");
        Map<String, String> map = new HashMap<>();

        for (Object da : result) {
            JSONObject jsonObject1 = JSONObject.parseObject(da.toString());
            String ename = (String) jsonObject1.get("ename");
            String body;
            //省
            if (ename.substring(ename.length() - 1, ename.length()).equals("省") ||
                    ename.substring(ename.length() - 3, ename.length()).equals("自治区")) {
                String province = "https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=28209&from_mid=1&&format=json&ie=utf-8&oe=utf-8&query=" + ename + "%E6%9C%89%E5%A4%9A%E5%B0%91%E4%B8%AA%E5%9F%8E%E5%B8%82&sort_key=&sort_type=1&stat0=&stat1=&stat2=&stat3=&pn=0&rn=100";
                body = getUrl(province);
            } else {
                String administrativeArea = "https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=28209&from_mid=1&&format=json&ie=utf-8&oe=utf-8&query=" + ename + "%E6%9C%89%E5%A4%9A%E5%B0%91%E4%B8%AA%E5%8C%BA&sort_key=&sort_type=1&stat0=&stat1=&stat2=&stat3=&pn=0&rn=100";
                body = getUrl(administrativeArea);
            }
            map.put(ename, body);
        }

        //提取城市和区
        Map<String, List<String>> datas = new HashMap<>();

        for (Map.Entry<String, String> entry : map.entrySet()) {
            String rp = entry.getValue();
            List<String> list = new ArrayList<>();
            JSONArray dataRp = JSONObject.parseObject(rp).getJSONArray("data");
            JSONArray dataRpList = JSONObject.parseObject(dataRp.get(0).toString()).getJSONArray("result");
            for (Object datarPs : dataRpList) {
                // System.out.println(datarPs);
                //拿到可能就是市还不是区
                String ename = (String) JSONObject.parseObject(datarPs.toString()).get("ename");
                list.add(ename);
            }
            datas.put(entry.getKey(), list);
        }
        return datas;
    }

    public static String getUrl(String url) {
        HttpGet httpGet = new HttpGet(url);
        HttpClient client = new DefaultHttpClient();
        HttpResponse execute = null;
        try {
            execute = client.execute(httpGet);
        } catch (IOException e) {
            e.printStackTrace();
        }
        HttpEntity entity = execute.getEntity();
        String data = null;
        try {
            data = unicodeToString(EntityUtils.toString(entity, "utf8"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }


    public static String unicodeToString(String str) {

        Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
        Matcher matcher = pattern.matcher(str);
        char ch;
        while (matcher.find()) {
            ch = (char) Integer.parseInt(matcher.group(2), 16);
            str = str.replace(matcher.group(1), ch + "");
        }
        return str;
    }
}
